package com.reconcile.phone.system.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.reconcile.phone.common.constant.CacheNames;
import com.reconcile.phone.system.domain.SysRegion;
import com.reconcile.phone.system.domain.vo.AllRegionVo;
import java.util.List;
import org.springframework.cache.annotation.Cacheable;

/**
 * 行政区划 服务
 *
 * @author shichunjie
 * @since 2024/1/19
 */
public interface SysRegionService extends IService<SysRegion> {

  /**
   * 根据code查询列表信息
   *
   * @param code
   * @return
   */
  List<SysRegion> selectList(String code);

  /**
   * 行政区划根据code查询坐标
   */
  SysRegion selectCoordinate(String code);

  /**
   * 行政区划根据code查询数据
   */
  SysRegion selectSysRegion(String code);

  /**
   * 查询所有行政区划
   */
  List<AllRegionVo> getAll();

  @Cacheable(value = CacheNames.SYS_REGION_ALL_A, key = "#root.method.name")
  List<AllRegionVo> getAllA();

  /**
   * 通过 行政规划code 查询 行政规划名称
   *
   * @param codes 行政规划code串逗号分隔
   * @return 行政规划名称拼接
   */
  String selectRegionNameByCodes(String codes);

  /**
   * 通过 行政规划code 查询 行政规划名称 带横杠
   *
   * @param codes 行政规划code串逗号分隔
   * @return 行政规划名称拼接
   */
  String selectRegionNameByCodesAndUnderline(String codes);


  /**
   * 根据省名称查询数据
   *
   * @param provinceName 省名称
   * @return 省数据
   */
  SysRegion selectDataByProvinceName(String provinceName);


  /**
   * 根据市名称查询数据
   *
   * @param cityName
   * @return
   */
  SysRegion selectCityNameByData(String cityName);

  /**
   * 根据城市省code加市或区县名称名称查询数据
   *
   * @param provinceCode 省code
   * @param countyName   市或区县名称
   * @return 数据
   */
  SysRegion selectSysRegionByProvinceCodeAndCountyName(String provinceCode, String countyName);

  /**
   * 根据城市(省或者市)code加下级名称查询数据
   *
   * @param cityCode   省或者市code
   * @param countyName 下级名称
   * @return 数据
   */
  SysRegion selectSysRegionByData(String cityCode, String countyName);
}
